#!/bin/bash

# Crop image
#
# Requires ImageMagick and exiftool


process_raw ()
{
	tmpdir=$(mktemp --tmpdir --directory geeqie_crop_image_XXXXXX)

	list=$(exiv2 -pp "$1")
	if [[ ! -z "$list" ]]
	then
		readarray -t split_list <<<"$list"

		array_length="${#split_list[@]}" 
		exiv2 -ep"$array_length" "$1" --location "$tmpdir"

		src_filename=$(ls "$tmpdir/")
		filename="${src_filename%.*}"
		extension="${src_filename##*.}"
		rotation=$(exiftool -Orientation -n "$1" | cut -d':' -f2 | xargs)
		convert "$tmpdir/$src_filename" -crop "$2" "$tmpdir/$filename-crop.$extension"

		exiftool -Orientation=$rotation -n "$tmpdir/$filename-crop.$extension"

		rm "$tmpdir/$src_filename"

		geeqie --remote view:"$tmpdir/$filename-crop.$extension"
		res=0
	else
		res=1
	fi

	return $res
}

process_plain ()
{
	tmpdir=$(mktemp --tmpdir --directory geeqie_crop_image_XXXXXX)

	src_filename=$(basename -- "$1")
	filename="${src_filename%.*}"
	extension="${src_filename##*.}"
	convert "$1" -crop "$2" "$tmpdir/$filename-crop.$extension"
	if [ $? = 1 ]
	then
		zenity --error --title="$title" --text="Cannot process this file format" --width="$width" --window-icon="$window_icon"
	else
		geeqie --remote view:"$tmpdir/$filename-crop.$extension"
	fi
}

export window_icon="/usr/local/share/pixmaps/geeqie.png"
export title="Geeqie crop image"
export width="250"

if [ -x "$(command -v convert)" ]
then
	if [ -x "$(command -v exiftool)" ]
	then

		coords=$(geeqie --remote --get-rectangle)

		if [ -z "$coords" ]
		then
			zenity --error --title="$title" --text="Rectangle coordinates have not been set" --width="$width" --window-icon="$window_icon" 2>/dev/null
			exit 0
		fi

		filename=$(basename -- "$1")
		extension="${filename##*.}"

		if [ "${extension,,}" = "jpeg" ]
		then
			source_file="$1"
			process_plain "$1" $coords
		elif [ "${extension,,}" = "jpg" ]
		then
			source_file="$1"
			process_plain "$1" $coords
		elif [ "${extension,,}" = "png" ]
		then
			source_file="$1"
			process_plain "$1" $coords
		elif [ "${extension,,}" = "tif" ]
		then
			source_file="$1"
			process_plain "$1" $coords
		elif [ "${extension,,}" = "tiff" ]
		then
			source_file="$1"
			process_plain "$1" $coords
		else
			process_raw "$1" $coords
			if [ $? = 1 ]
			then
				process_plain "$1" $coords
			fi
		fi
	else
		zenity --info --title="$title" --width="$width" --height=100 --text="Crop image\n\nexiftool is not installed" --title="$title" --window-icon="$window_icon" 2>/dev/null
		exit 0
	fi
else
	zenity --info --title="$title" --width="$width" --height=100 --text="Crop image\n\nImageMagick is not installed" --title="$title" --window-icon="$window_icon" 2>/dev/null
	exit 0
fi
